<?php
require_once __DIR__ . '/hong_webdav/Webdav.php';

use Hong\Webdav\Webdav;

// WebDAV 服务器配置
$webdavConfig = [
	'base_uri' => 'http://192.168.16.169', 		// 替换为你的WebDAV服务器地址，u盘内网ip
	'base_dir' => '/webdav',					// 这是u盘默认根目录，不需要修改
	'username' => 'Digest_username',				// 替换为你的用户名
	'password' => 'Digest_password'				// 替换为你的密码
];

try {
	// 创建客户端实例
	$client = new Webdav($webdavConfig['base_uri'], $webdavConfig['base_dir'], $webdavConfig['username'], $webdavConfig['password']);

	/**
	 * OPTIONS 使用OPTIONS获取服务器可提供的能力
	 * 无参数，返回 status 204
	 *  */ 
	// $capabilities = $client->options();
	// echo "Server capabilities:\n";
	// print_r($capabilities);

	/** 
	 * PROPFIND 使用PROPFIND获取资源属性
	 * @param string 目录或者文件，为空是根目录，类中会自动加上"/webdav"根目录
	 * @param array 额外的请求头信息，Depth: 0值为只取uri的信息；1值为取uri目录中同级文件与目录信息
	 * @param array 组装XML在body中请求，为了适应RaiDrive工具保留的，目前只有查询u盘空间大小的功能
	 * @return XML 返回资源信息
	 * */ 
	$props = $client->propfind('', [
		'Depth: 0',		// 不要列表
	], [
		'quota-available-bytes',	// 咨询总空间大小
		'quota-used-bytes' 			// 咨询已用空间大小
	]);
	echo "\nRoot directory properties:\n";
	print_r($props);

	/** 
	 * PROPFIND 获取目录及其直接子项的所有属性 Depth = 1
	 * @param string 目录或者文件
	 * @param array Depth: 1,如果是请求目录，将返回目录列表
	 * @return XML 返回资源信息
	*/
	// $allProps = $client->propfind('', ['Depth: 1']);
	// echo "\nAll properties with depth 1:\n";
	// print_r($allProps);

	// 本地文件
	$localFile = "./10-03.nc";
	// 计算本地文件的crc32校验码
	// echo $client->fileCrc32($localFile);

	/** 
	 * PUT 示例 - 上传本地文件
	 * @param string 要保存到远程的位置和文件名，[/123.txt]，类中会自动加上根目录[/webdav]
	 * @param string 本地文件
	 * @return txt status 200, body: txt
	 * */ 
	$putSuccess = $client->put('/10-03.nc', $localFile);
	if ($putSuccess) {
		echo "File uploaded successfully!\n";
	}

	/**
	 * GET 示例 - 下载文件
	 * @param string 要下载的文件，uri可以从propfind中取得远程的文件路径，但是不要带[/webdav]前缀，请求时会自动加上
	 * @param string 文件要保存的位置，注意要有权限
	 * @return true_or_body 如果不提供保存路径将返回文件数据
	 *  */ 
	// $upanFile = "/10-03.nc";
	// $saveFile = "./123.nc";
	// $fileContent = $client->get($upanFile, $saveFile);
	// if ($fileContent > 0) {
	// 	echo "Download file[" . $saveFile . "] successfully.\n";
	// } else {
	// 	echo "Download file[" . $saveFile . "] error.\n";
	// }

	/**
	 * DELETE 删除文件 目录
	 * @param remotePath 要操作的路径
	 * @return true/false
	 */
	$remotePath = '/10-03.nc';
	// if($client->delete($remotePath)){
	// 	echo '删除成功';
	// }else{
	// 	echo '删除失败';
	// }

	/**
	 * DELETE 重启u盘 或者u盘接口
	 * @param remotePath 要操作的路径，必需是根目录，留空，类中会加上根目录[/webdav]
	 * @param array 头信息，Reboot: 0[默认0不重启，1重启芯片，2重启usb]，定为根目录，这个Reboot才有效
	 * @return true/false
	 */
	// $reboot = 0; // 0/1/2
	// if ($reboot > 0 && $client->delete('', [
	// 	'Reboot: ' . $reboot, // 重启
	// ])) {
	// 	echo ($reboot==1?'U盘 ':'USB接口 ') . '重启成功';
	// } else {
	// 	echo ($reboot==1?'U盘 ':'USB接口 ') . '重启失败';
	// }

} catch (\Exception $e) {
	echo "Error: " . $e->getMessage() . "\n";
}
